/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/24 15:54
 */

//伊文有两个由0和1组成的字符串，A和B，长度分别为m和n(m>=n)。伊文希望取出A的连续子串与B构造若干长度为n的S串，满足：
//Si=A_(x+i)⊕Bi,i∈[1,n],x∈[0,m-n]
//S1⊕S2⊕S3⊕...⊕Sn-1⊕Sn=0
//⊕代表异或运算
//伊文想知道总共能够构造出多少个不同的S串。
//
//输入描述
//  输入有三行，第一行2个数m和n，为A和B的长度；
//  m,n(0<n≤m≤5*10^3)
//  第二行为长度为的A串
//  第三行为长度为的B串，A和B仅由'0'和'1'组成
//输出描述
//  输出：一个数字，代表不同的S串个数
//
//示例1
//输入
//8 2
//10100000
//10
//输出
//2
//说明
//  符合条件的S串为["00","11"]，分别由A的子串["10","01"]与B串得到

#include <iostream>
#include "unordered_set"
#include "string"

using namespace std;

int main() {
    int m, n;
    scanf("%d%d", &m, &n);
    string a;
    string b;
    cin >> a >> b;
    int tmp = 0;
    int res = 0;
    for (int i = 0; i < n; ++i) {
        tmp ^= b[i] - '0';
        tmp ^= a[i] - '0';
    }

    unordered_set<string> set;
    if (tmp == 0) {
        res++;
        set.insert(a.substr(0, n));
    }
    for (int i = n; i < m; i++) {
        tmp = tmp ^ a[i] ^ a[i - n];
        if (tmp == 0) {
            string ss = a.substr(i - n + 1, n);
            if (set.find(ss) == set.end()) {
                set.insert(ss);
                res++;
            }
        }
    }
    printf("%d", res);
    return 0;
}